<?php

//
//TODO ändra så det inte visas fel när sidan laddas för första gången.
//

class Search extends CI_Controller
{
	//
	//Enable profiler
	//
	
	
	function __construct()
	{
		parent::__construct();
		$this->load->library('form_validation');
		$this->load->helper(array('url','html','form','security','date'));
	}
	
	function index()
	{
	
	
		//validering av startdatum, starttid, slutdatum och sluttid.
		$this->form_validation->set_rules('startDate','Start datum','required|valid_date|xss_clean');
		$this->form_validation->set_rules('endDate','Återlämnings datum','required|valid_date|xss_clean');
		$this->form_validation->set_rules('startTime','Starttid','required|valid_time|xss_clean');
		$this->form_validation->set_rules('endTime','Sluttid','required|valid_time|xss_clean');
		
		if(!$this->form_validation->run())
		{
			//Kod som körs om det inte finns något att validera.
			$data=array('title'=>'testsök','jscript'=>TRUE);
			$this->load->view('global/view_master_header',$data);
			$this->load->view('booking/view_search_datepicker');
			$this->load->view('booking/view_search_start');
			$this->load->view('global/view_master_footer');			
		}
		
		else
		{
			//Spara de postade värdena i variabler.
			$startDate=trim($this->input->post('startDate'));
			$startTime=trim($this->input->post('startTime'));
			$endDate=trim($this->input->post('endDate'));
			$endTime=trim($this->input->post('endTime'));
			
			//Delar upp de olika tid och datum elementena i egna variabler.
			$startDateSplit=explode('-',$startDate);
			$startTimeSplit=explode(':',$startTime);
			$endDateSplit=explode('-',$endDate);
			$endTimeSplit=explode(':',$endTime);
			
			//Skapar date objekt av datum och tid.
			$startDateTime=date('Y-m-d H:i:s',mktime($startTimeSplit[0],$startTimeSplit[1],00,$startDateSplit[1],$startDateSplit[2],$startDateSplit[0]));
			$endDateTime=date('Y-m-d H:i:s',mktime($endTimeSplit[0],$endTimeSplit[1],00,$endDateSplit[1],$endDateSplit[2],$endDateSplit[0]));	
	
	
			
			//Hämta alla bilars id nummer.
			$this->load->model('Car_model');
			$allCarId=$this->Car_model->GetAllCars();
			
	
			
			//kollar om användaren är inloggad och använder isåfall dennes prisklass annars sätts
			//standard prisklass 1.
			$priceClass=1;
			if($this->session->userdata('LoggedIn'))
			{
				$priceClass=$this->session->userdata('PriceCategory');
			}
			
			//håller information om alla bilar som är lediga på sökt datumet.
			$freeCarInfo=array();
			$i=0;
			
				foreach($allCarId as $row)
				{
					if($result=$this->Car_model->GetAllFreeCars($row->id,$priceClass,$startDateTime,$endDateTime))
					{
						$freeCarInfo[$i]=$result;
						$i++;
					}
				}
			
			//kontrollerar om det finns några lediga bilar för valt datum.
			//annars returneras en kalender.
			if($freeCarInfo)
			{	
				
				//Data som ska skickas med till viewn sparas i arayen carData
				$carData['query']=$freeCarInfo;
				$carData['startDate']=$startDateTime;
				$carData['endDate']=$endDateTime;
				
				
				
				//Laddar viewn.
				$data=array('title'=>'testsök','jscript'=>TRUE); //för att använda javascript i viewn
				$this->load->view('global/view_master_header',$data);
				$this->load->view('booking/view_search_datepicker');
				$this->load->view('booking/view_search_all',$carData);
				$this->load->view('global/view_master_footer');
			}
			
			else
			//returnerar kalender.
			{
				$allCarId=$allCarId;
				$startDateToSchema=$startDateSplit[0].'-'.$startDateSplit[1].'-'.$startDateSplit[2];
				$endDateToSchema=$endDateSplit[0].'-'.$endDateSplit[1].'-'.$endDateSplit[2];
				$schema=array();
				
				foreach ($allCarId as $car)
				{
				
					$schema[$car->id]=$this->_GetSchema($car->id,$startDateToSchema,$endDateToSchema);
				}
					
					$carSchema['schema']=$schema;
					
					
			
					//kod som körs för att returnera en view med kalender.
					$data=array('title'=>'testsök','jscript'=>TRUE,
								'cssData'=>'Calendar.css'); //för att använda javascript i viewn
					$this->load->view('global/view_master_header',$data);
					$this->load->view('booking/view_search_datepicker');
					$this->load->view('booking/view_search_calendar',$carSchema);
					$this->load->view('global/view_master_footer');
				
			
	
			}	
		}

	}
	
	private function _GetDateSpanArray($startDate,$endDate)
	{
		$timeStartDate=strtotime($startDate);
		$timeEndDate=strtotime($endDate);
		
		$span=($timeEndDate-$timeStartDate)/60/60/24;
		
		//om det span är större än 7 dagar ändras span till 7.
		if ($span>7)
		{
			$span=7;
		}
		//arrayen som ska hålla alla daum.
		$dates=array();
		
		//loopar ut alla datum melln start och slutdatumet.
		for ($i=0;$i<=$span;$i++)
		{
			array_push($dates,date('Y-m-d', strtotime("+$i day", $timeStartDate)));
		}
		
		return $dates;
		
		
	}
	
	private function _GetSchema($carId,$startDate,$endDate)
	{
		//skapar en array med alla datum.		
		$dates=$this->_GetDateSpanArray($startDate,$endDate);		
				
		//skapar u scheman för varje datum för bilen.
			$schema=array();
			require_once(APPPATH.'libraries/Oday.php');
			//hämtar schema information.
			
			foreach($dates as $date)
			{	
				$oday1= new Oday($date);
				$oday1->carID=$carId;
				$oday1->AddCarInfo();
				$oday1->CheckBooked();
				$oday1->GenerateFreeOtime();
				array_push($schema,$oday1);			
			}
					
			return $schema;
	}
	
	
	
	function getendtime()
	{
		$selectedDate=trim($this->input->post('endDate'));
		$this->load->model('OpeningTimes_model');
		$timeArray=$this->OpeningTimes_model->GetEndRentalTime($selectedDate);
		echo json_encode($timeArray);
	}

	
		function getstarttime()
	{
		$selectedDate=trim($this->input->post('startDate'));
		$this->load->model('OpeningTimes_model');
		$timeArray=$this->OpeningTimes_model->GetStartRentalTime($selectedDate);
		echo json_encode($timeArray);
	}
	



}
?>